Класс System.Collections.Generic.HashSet<T>

Замечание

В этой статье приводятся дополнительные замечания к справочной документации по этому API.

Класс HashSet<T> предоставляет высокопроизводительные операции с наборами. Набор представляет собой коллекцию, которая не содержит повторяющихся элементов и элементы которых не имеют определенного порядка.

Емкость HashSet<T> объекта — это количество элементов, которые может хранить объект. HashSet<T> Емкость объекта автоматически увеличивается по мере добавления элементов в объект.

Класс HashSet<T> основан на модели математических наборов и обеспечивает высокопроизводительные операции, аналогичные доступу к ключам Dictionary<TKey,TValue> или Hashtable коллекциям. В простых терминах HashSet<T> класс можно рассматривать как коллекцию без значений Dictionary<TKey,TValue> .

Коллекция HashSet<T> не отсортирована и не может содержать повторяющиеся элементы. Если порядок или дублирование элементов более важно, чем производительность приложения, рассмотрите возможность использования List<T> класса вместе с методом Sort .

HashSet<T> предоставляет множество математических операций над множествами, как например, объединение множеств и разность множеств. В следующей таблице перечислены предоставленные HashSet<T> операции и их математические эквиваленты.

Операция с HashSet Математический эквивалент
UnionWith Объединение или добавление набора
IntersectWith Пересечение
ExceptWith Установка вычитания
SymmetricExceptWith Симметричное различие

Помимо перечисленных операций HashSet<T> набора класс также предоставляет методы для определения равенства наборов, перекрытия наборов и того, является ли набор подмножеством или супермножеством другого набора.

Только .NET Framework: Для очень крупных HashSet<T> объектов можно увеличить максимальную емкость до 2 миллиардов элементов в 64-разрядной системе, задав enabled атрибут <gcAllowVeryLargeObjects> элемента true конфигурации в среде выполнения.

Класс HashSet<T> реализует интерфейс ISet<T>.

Операции HashSet и операции множеств LINQ

LINQ предоставляет доступ к операции над наборами Distinct, Union, Intersect и Except для любого источника данных, реализующего интерфейсы IEnumerable или IQueryable. HashSet<T> предоставляет более обширную и мощную коллекцию операций с множествами. Например, HashSet<T> предоставляет сравнения, такие как IsSubsetOf и IsSupersetOf.

Основное различие между операциями набора LINQ и HashSet<T> операциями заключается в том, что операции набора LINQ всегда возвращают новую IEnumerable<T> коллекцию, а HashSet<T> эквивалентные методы изменяют текущую коллекцию.

Как правило, если необходимо создать новый набор или если приложению требуется доступ только к предоставленным операциям набора, использование операций набора LINQ для любой IEnumerable<T> коллекции или массива будет достаточно. Тем не менее, если вашему приложению требуется доступ к дополнительным операциям над набором или если не желательно или необходимо создавать новую коллекцию, используйте класс HashSet<T>.

В следующей HashSet<T> таблице показаны операции и их эквивалентные операции набора LINQ.

Операция с HashSet Эквивалент LINQ
UnionWith Union
IntersectWith Intersect
ExceptWith Except
Не предоставлено. Distinct
SymmetricExceptWith Не предоставлено.
Overlaps Не предоставлено.
IsSubsetOf Не предоставлено.
IsProperSubsetOf Не предоставлено.
IsSupersetOf Не предоставлено.
IsProperSupersetOf Не предоставлено.
SetEquals Не предоставлено.